package com.utf999.qiangmanger.dao.iface;

import java.util.Date;
import java.util.List;

import com.utf999.qiangmanger.dao.IQiangDAO;
import com.utf999.qiangmanger.entity.PageEntity;
import com.utf999.qiangmanger.entity.orm.OrderInfoEntity;
import com.utf999.qiangmanger.exception.BizException;

/**
 * @author yinwenjie
 *
 */
public interface IOrderInfoDAO extends IQiangDAO<OrderInfoEntity> {
	/**
	 * 该方法用于建立一个工单对应的一个或者多个用户组信息
	 * @param orderinfoID 工单编号
	 * @param groupid 一个或者多个用户组编号
	 * @throws BizException
	 */
	public void appendOrderInfoGroupMapping(String orderinfoID , String[] groupid) throws BizException;
	
	/**
	 * 当一个指定的工单完成了配货步骤，使用该业务方法更新工单的“配货状态”，和“应付总金额”
	 * @param orderinfoid 指定的工单id
	 * @param totalAmount 应付总金额
	 */
	public void updatePickingStatus(String orderinfoid , Float totalAmount) throws BizException;
	
	/**
	 * 对指定的工单信息，进行核算信息的存储。
	 * @param orderinfoid 指定的工单编号
	 * @param adminuserid 核算人员的编号
	 * @param realIntegral 最后核算的获得积分
	 * @param realTotalAmount 最后核算的消费单实际收费金额
	 * @throws BizException
	 */
	public void saveOrderinfoAccount(String orderinfoid, String adminuserid , Integer realIntegral , Float realTotalAmount) throws BizException;
	
	/**
	 * 该方法用于查询指定的店面下，还没有完成商品配货的“消费单”信息。
	 * @param storefrontid 指定的店面编号
	 * @throws BizException
	 */
	public List<OrderInfoEntity> queryPickingOrder(String storefrontid) throws BizException;
	
	/**
	 * 该方法用于查询指定的店面下，还没有完成服务的“待办工单”信息
	 * @param storefrontid 指定的店面编号
	 * @param orderMode 可能作为查询条件的派单方式
	 * @param orderStatus 可能作为查询条件的工单状态
	 * @param waiterCode 可能作为查询条件的服务员工号
	 * @param roomNo 可能作为查询条件的房间号
	 */
	public List<OrderInfoEntity> queryTaskOrder(String storefrontid , Integer orderMode , Integer orderStatus , String waiterCode , String roomNo) throws BizException;
	
	/**
	 * 该方法用于查询指定的店面下，已经完成服务等待结算的工单信息
	 * @param storefrontid 指定的店面编号
	 * @param orderMode 可能作为查询条件的派单方式
	 * @param waiterCode 可能作为查询条件的服务员工号
	 * @param roomNo 可能作为查询条件的房间号
	 */
	public List<OrderInfoEntity> queryAccountOrders(String storefrontid , Integer orderMode , String waiterCode , String roomNo) throws BizException;
	
	/**
	 * 该方法用于查询指定的已经完成服务等待结算的工单信息。
	 * 包括这个工单的预结算信息
	 * @param orderinfoid 指定的工单编号信息
	 * @return 
	 * @throws BizException
	 */
	public OrderInfoEntity queryAccountOrder(String orderinfoid) throws BizException;
	
	/**
	 * 查询指定工单的基本信息，包括可能的工单类型、工单商品
	 * @param orderinfoid 指定的工单编号信息
	 * @return
	 * @throws BizException
	 */
	public OrderInfoEntity queryOrderinfoDetails(String orderinfoid) throws BizException;
	
	/**
	 * 工单报表，只有“归档”状态下的工单才会参与报表统计
	 * @param companyid 报表都是按照店面或者公司为单位进行统计的
	 * @param storefrontid 报表都是按照店面或者公司为单位进行统计的
	 * @param orderMode 可能作为查询条件的派单方式
	 * @param workNumber 可能作为查询条件的服务员工号
	 * @param roomNo 可能作为查询条件的房间号
	 * @param beginFilingTime 可能指定的归档时间的开始点范围
	 * @param endFilingTime 可能指定的归档时间的结束点范围
	 * @param pageNum 分页页码，从0开始
	 * @param maxrow 每页的最大记录数量，如果没有传入则会默认为20
	 * @return 
	 * @throws BizException
	 */
	public PageEntity reportOrderInfo(String companyid , String storefrontid , Integer orderMode , String workNumber , String roomNo , Date beginFilingTime , Date endFilingTime , Integer pageNum , Integer maxrow) throws BizException;
	
	/**
	 * 人员业绩报表，只有“归档”状态下的工单才会参与报表统计
	 * @param companyid 报表都是按照店面或者公司为单位进行统计的
	 * @param storefrontid 报表都是按照店面或者公司为单位进行统计的
	 * @param orderMode 可能作为查询条件的派单方式
	 * @param workNumber 可能作为查询条件的服务员工号
	 * @param roomNo 可能作为查询条件的房间号
	 * @param beginFilingTime 可能指定的归档时间的开始点范围
	 * @param endFilingTime 可能指定的归档时间的结束点范围
	 * @param pageNum 分页页码，从0开始
	 * @param maxrow 每页的最大记录数量，如果没有传入则会默认为20
	 * @return
	 * @throws BizException
	 */
	public PageEntity reportTotalGroupbyUserid(String companyid , String storefrontid , Integer orderMode , String workNumber , String roomNo , Date beginFilingTime , Date endFilingTime , Integer pageNum , Integer maxrow) throws BizException;
}